﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using GestionSaludOcupacional.Portal.Base;
using GestionSaludOcupacional.Portal.Base.Models;
using GestionSaludOcupacional.Portal.Base.ViewModels;
using GestionSaludOcupacional.Portal.Base.ViewModels.Examenes;
using GestionSaludOcupacional.Portal.Base.ViewModels.HistoriaClinica;
using GestionSaludOcupacional.Portal.Base.ViewModels.Reportes;

namespace GestionSaludOcupacional.Infrastructure.Mapping
{
    public interface IMappingService
    {
        Cita GetModel(CitasViewModel cita);
        IEnumerable<Cita> GetModel(IEnumerable<Data.Cita> cita);
        Cita GetModel(Data.Cita cita);

        Individuo GetModel(Data.Individuo individuo);
        Individuo GetModel(IndividuoViewModel individuo);

        MedicoModel GetModel(Data.Medico medico);
        HistoriaClinica GetModel(Data.HistoriaClinica historiaClinica);
        HistoriaClinica GetModel(HistoriaClinicaRegistroViewModel historia);
        HistoriaClinicaRegistro GetModelRegistro(HistoriaClinicaRegistroViewModel historia);
        HistoriaClinicaRegistro GetModel(Data.HistoriaClinicaRegistro historiaClinicaRegistro);

        ExamenVision GetModel(ExamenVisionViewModel examenVision);
        ExamenPsicosensometria GetModel(ExamenPsicosensometriaViewModel examenPsicosensometria);
        ExamenPsicologia GetModel(ExamenPsicologiaViewModel examenPsicologia);
        ExamenAudicion GetModel(ExamenAudicionViewModel examenAudicion);

        IndividuoDetalleViewModel GetViewModelDetail(Individuo individuo);
        IndividuoViewModel GetViewModel(Individuo individuo);
        IEnumerable<IndividuoViewModel> GetViewModel(IEnumerable<Individuo> individuo);

        CitasViewModel GetViewModel(Cita cita);
        IEnumerable<CitasViewModel> GetViewModel(IEnumerable<Cita> citas);

        ExamenVisionViewModel GetViewModel(ExamenVision examenVision);
        ExamenPsicosensometriaViewModel GetViewModel(ExamenPsicosensometria examenPsicosensometria);
        ExamenPsicologiaViewModel GetViewModel(ExamenPsicologia examenPsicologia);
        ExamenAudicionViewModel GetViewModel(ExamenAudicion examenAudicion);
        HistoriaClinicaRegistroViewModel GetViewModel(HistoriaClinicaRegistro historiaClinicaRegistro);

        ReporteExamenVisionViewModel GetReportViewModel(ExamenVision examenVision);
        ReporteExamenAudicionViewModel GetReportViewModel(ExamenAudicion examenAudicion);
        ReporteExamenPsicologiaViewModel GetReportViewModel(ExamenPsicologia examenPsicologia);
        ReporteExamenPsicosensometricoViewModel GetReportViewModel(ExamenPsicosensometria examenPsicosensometria);

        IEnumerable<IndividuoDetalleViewModel> GetAllViewModel(IEnumerable<Individuo> individuos);

        IEnumerable<HistoriaClinicaRegistroViewModel> GetAllViewModel(
            IEnumerable<HistoriaClinicaRegistro> historiaClinicaRegistros);

        IEnumerable<HistoriaClinicaRegistro> GetAllViewModel(
            IEnumerable<Data.HistoriaClinicaRegistro> historiaClinicaRegistros);

        IEnumerable<Individuo> GetAllModel(IEnumerable<Data.Individuo> individuos);
        IEnumerable<MedicoModel> GetAllModel(IEnumerable<Data.Medico> medicos);

        Data.Medico GetEntity(MedicoModel medico);
        Data.Cita GetEntity(Cita cita);
        Data.Individuo GetEntity(Individuo individuo);
        Data.HistoriaClinica GetEntity(HistoriaClinica historiaClinica);
        Data.HistoriaClinicaRegistro GetEntity(HistoriaClinicaRegistro historiaClinicaRegistro);

        Data.ExamenVision GetEntity(ExamenVision examenVision);
        ExamenVision GetEntity(Data.ExamenVision examenVision);
        IEnumerable<ExamenVision> GetEntity(IEnumerable<Data.ExamenVision> examenVision);

        Data.ExamenPsicosensometria GetEntity(ExamenPsicosensometria examenPsicosensometria);
        ExamenPsicosensometria GetEntity(Data.ExamenPsicosensometria examenPsicosensometria);
        IEnumerable<ExamenPsicosensometria> GetEntity(IEnumerable<Data.ExamenPsicosensometria> examenVision);

        Data.ExamenPsicologia GetEntity(ExamenPsicologia examenPsicologia);
        ExamenPsicologia GetEntity(Data.ExamenPsicologia examenPsicologia);
        IEnumerable<ExamenPsicologia> GetEntity(IEnumerable<Data.ExamenPsicologia> examenVision);

        Data.ExamenAudicion GetEntity(ExamenAudicion examenAudicion);
        ExamenAudicion GetEntity(Data.ExamenAudicion examenAudicion);
        IEnumerable<ExamenAudicion> GetEntity(IEnumerable<Data.ExamenAudicion> examenVision);
    }
}
